home *** CD-ROM | disk | FTP | other *** search
/ Aminet 8 / Aminet 8 (1995)(GTI - Schatztruhe)[!][Oct 1995].iso / Aminet / util / boot / BangerVers.lha / BangerVersion.Asm < prev    next >
Assembly Source File  |  1995-08-29  |  16KB  |  808 lines

  1. ;Programm: VersionPlus ist ein kleines Programm um die Version als FileComment zu setzen
  2. ;Autor   : Andre´ Trettin
  3. ;Codename: Banger
  4. ;Begin   : Dez-94
  5. ;$VER    : VersionPlus.Asm 1.326 29-Aug-95
  6.  
  7. ** INCLUDE Struktur Variablen
  8. * Fehler Codes: 21=kein Speicher
  9. *               22=konnte DOS.library nicht öffnen
  10. *               23=konnte File nicht öffnen
  11.  
  12.     incdir INCLUDE:
  13.     include lvo/dos_lib.i
  14.     include lvo/exec_lib.i
  15.     include dos/dos.i
  16.     include exec/exec.i
  17.  
  18.     STRUCTURE Internal,0
  19.     APTR    DOSBase
  20.     APTR    TempArray
  21.     APTR    CSAArg
  22.     APTR    NDAArg
  23.     APTR    ONCArg
  24.     APTR    ALLArg
  25.     APTR    QUIETArg
  26.     APTR    RDArgs
  27.     APTR    FileListe
  28.     APTR    letztesFile
  29.     APTR    MyBasisLock
  30.     APTR    JetzigeLock
  31.     STRUCT  JetzigerFIB,[fib_SIZEOF]
  32.     STRUCT  FIBs,[fib_SIZEOF*21]
  33.     STRUCT  MyLocks,[4*21]
  34.     STRUCT  BufferName,[512]
  35.     WORD    DirAnzahl
  36. *; Unterprog File bearbeitung ****
  37.     APTR    FileMem
  38.     APTR    FileHandle
  39.     WORD    Output2Leer
  40.     STRUCT  BufferComment,[88]
  41.     APTR    OutputHandle
  42.     BYTE    Suche2Var
  43.     BYTE    Suche3Var
  44.     BYTE    Suche4Var
  45.     LABEL   Int_SIZEOF
  46. ;;
  47. ** Int-Speicher reservieren + dos.lib öffene
  48.     moveq   #0,d7
  49.     move.l  4.w,a6
  50.     move.l  #Int_SIZEOF,d0
  51.     move.l  #MEMF_PUBLIC!MEMF_CLEAR,d1
  52.     jsr     _LVOAllocMem(a6)
  53.     move.l  d0,a5
  54.     bne.s   LibraryOeffnen
  55.     moveq   #21,d7           ;21 = kein Speicher
  56.     bra.w   Ende
  57. LibraryOeffnen
  58.     lea     dosname(pc),a1
  59.     moveq   #37,d0
  60.     jsr     _LVOOpenLibrary(a6)
  61.     move.l  d0,DOSBase(a5)
  62.     bne.s   LibOK
  63.     moveq   #22,d7              ;22 = konnte dos.library nicht öffnen
  64.     bra.w   IntMemFree
  65. ;;
  66. ** Parse Parameter with readarg
  67. LibOK
  68.     move.l  DOSBase(a5),a6
  69.     lea     Comtemplate(pc),a1
  70.     move.l  a1,d1
  71.     lea     TempArray(a5),a1
  72.     move.l  a1,d2
  73.     moveq   #0,d3
  74.     jsr     _LVOReadArgs(a6)
  75.     move.l  d0,RDArgs(a5)
  76.     bne.s   ParaOK
  77.     bsr.w   DOS_Fehler
  78.     bra.w   SchliesseLib
  79. ;;
  80. ** Filesearch routine
  81. ParaOK
  82.     move.w  #'  ',Output2Leer(a5)
  83.     jsr     _LVOOutput(a6)
  84.     move.l  d0,OutputHandle(a5)
  85.     tst.l   QUIETArg(a5)
  86.     bne.s   keinWillkommen
  87.     move.l  d0,d1
  88.     lea     Willkommen(pc),a0
  89.     move.l  a0,d2
  90.     moveq   #WillkommenEnde-Willkommen,d3
  91.     jsr     _LVOWrite(a6)
  92. keinWillkommen
  93. ;    lea     TempPC(pc),a0
  94. ;    move.l  a0,TempArray(a5)
  95.     moveq   #0,d6
  96.     move.l  TempArray(a5),a4
  97. naechstesTArray
  98.     move.l  (a4)+,d1
  99.     beq.w   keinFilemehr
  100.     move.l  #ACCESS_READ,d2
  101.     jsr     _LVOLock(a6)
  102.     move.l  d0,MyBasisLock(a5)
  103.     bne.s   LockisOK
  104.     bsr.w   DOS_Fehler
  105.     bra.w   keinFilemehr
  106. LockisOK
  107.     move.l  MyBasisLock(a5),JetzigeLock(a5)
  108. naechstesDir
  109.     move.l  JetzigeLock(a5),d1
  110.     lea     JetzigerFIB(a5),a3
  111.     move.l  a3,d2
  112.     jsr     _LVOExamine(a6)
  113.     tst.l   d0
  114.     bne.s   ExamineIsOK
  115.     bsr.w   DOS_Fehler
  116.     bra.w   UnlockMyBasis
  117. ExamineIsOK
  118.     move.l  fib_DirEntryType(a3),d0
  119.     tst.l   d0
  120.     bmi.w   einFile
  121. naechstesFile
  122.     move.l  JetzigeLock(a5),d1
  123.     lea     JetzigerFIB(a5),a3
  124.     move.l  a3,d2
  125.     jsr     _LVOExNext(a6)
  126.     tst.l   d0
  127.     bne.s   FileOderDir
  128.     jsr     _LVOIoErr(a6)
  129.     cmp.w   #ERROR_NO_MORE_ENTRIES,d0
  130.     beq.s   JetzigeUnlock
  131.     bsr.w   DOS_Fehler
  132. JetzigeUnlock
  133.     sub.w   #1,DirAnzahl(a5)
  134.     move.w  DirAnzahl(a5),d5
  135.     tst.w   d5
  136.     bmi.w   UnlockMyBasis
  137.     move.l  JetzigeLock(a5),d1
  138.     jsr     _LVOUnLock(a6)
  139.     move.w  d5,d1
  140.     asl.w   #2,d1
  141.     lea     MyLocks(a5),a0
  142.     lea     (a0,d1.w),a0
  143.     move.l  (a0),JetzigeLock(a5)
  144.     move.w  #fib_SIZEOF,d0
  145.     mulu    d0,d5
  146.     lea     FIBs(a5),a0
  147.     lea     (a0,d5.w),a0
  148.     subq    #1,d0
  149. restoreFIB
  150.     move.b  (a0)+,(a3)+
  151.     dbra    d0,restoreFIB
  152.     bra.s   naechstesFile
  153. FileOderDir
  154.     move.l  fib_DirEntryType(a3),d0
  155.     tst.l   d0
  156.     bmi.s   einFileImDir
  157.     tst.l   ALLArg(a5)
  158.     beq.s   naechstesFile
  159.     move.w  DirAnzahl(a5),d5
  160.     move.w  d5,d1
  161.     add.w   #1,DirAnzahl(a5)
  162.     asl.w   #2,d1
  163.     lea     MyLocks(a5),a2
  164.     lea     (a2,d1.w),a2
  165.     move.l  JetzigeLock(a5),(a2)
  166.     move.l  JetzigeLock(a5),d1
  167.     lea     BufferName(a5),a2
  168.     move.l  a2,d2
  169.     move.l  #512,d3
  170.     jsr     _LVONameFromLock(a6)
  171.     move.l  a2,d1
  172.     lea     fib_FileName(a3),a0
  173.     move.l  a0,d2
  174.     move.l  #512,d3
  175.     jsr     _LVOAddPart(a6)
  176.     move.l  a2,d1
  177.     move.l  #ACCESS_READ,d2
  178.     jsr     _LVOLock(a6)
  179.     move.l  d0,JetzigeLock(a5)
  180.     move.w  #fib_SIZEOF,d0
  181.     mulu    d0,d5
  182.     lea     FIBs(a5),a0
  183.     lea     (a0,d5.w),a0
  184.     subq    #1,d0
  185. copyFIB
  186.     move.b  (a3)+,(a0)+
  187.     move.b  #0,-1(a3)
  188.     dbra    d0,copyFIB
  189.     bra.w   naechstesDir
  190. einFile
  191.     moveq   #-1,d6
  192. einFileImDir
  193.     move.l  JetzigeLock(a5),d1
  194.     lea     BufferName(a5),a0
  195.     move.l  a0,d2
  196.     move.l  #512,d3
  197.     jsr     _LVONameFromLock(a6)
  198.     move.l  d6,letztesFile(a5)
  199.     move.l  a4,FileListe(a5)
  200.     bsr.s   FileBearbeit
  201.     move.l  FileListe(a5),a4
  202.     move.l  letztesFile(a5),d6
  203.     tst.l   d6
  204.     beq.w   naechstesFile
  205.     moveq   #0,d6
  206. UnlockMyBasis
  207.     move.l  MyBasisLock(a5),d1
  208.     jsr     _LVOUnLock(a6)
  209.     bra.w   naechstesTArray
  210. ;;
  211. ** FreeArgs
  212. keinFilemehr
  213.     move.l  RDArgs(a5),d1
  214.     jsr     _LVOFreeArgs(a6)
  215. ;;
  216. ** dos.library schliessen + int speicher freigeben + ende
  217. SchliesseLib
  218.     move.l  4.w,a6
  219.     move.l  DOSBase(a5),a1
  220.     jsr     _LVOCloseLibrary(a6)
  221. IntMemFree
  222.     move.l  a5,a1
  223.     move.l  #Int_SIZEOF,d0
  224.     jsr     _LVOFreeMem(a6)
  225. Ende
  226.     move.l  d7,d0
  227.     rts
  228. ;;
  229. ** DOS-Fehler + Ausgabe routine
  230. DOS_Fehler
  231.     jsr     _LVOIoErr(a6)
  232.     move.l  d0,d1
  233.     moveq   #0,d2
  234.     jsr     _LVOPrintFault(a6)
  235.     rts
  236. ;;
  237. ** FileBearbeit
  238. * a3 : FIB-struct
  239. * a5 : Internal-struct
  240. * a6 : DOSBase
  241. FileBearbeit
  242.     tst.l   d6
  243.     bmi.s   einFileName
  244.     lea     BufferName(a5),a0
  245.     move.l  a0,d1
  246.     lea     fib_FileName(a3),a0
  247.     move.l  a0,d2
  248.     move.l  #512,d3
  249.     jsr     _LVOAddPart(a6)
  250. einFileName
  251.     move.l  4.w,a6
  252.     move.l  fib_Size(a3),d0
  253.     move.l  #MEMF_PUBLIC!MEMF_CLEAR,d1
  254.     jsr     _LVOAllocMem(a6)
  255.     move.l  d0,FileMem(a5)
  256.     bne.s   oeffnen
  257.     moveq   #21,d7
  258.     bra.s   FileSucheEnde
  259. oeffnen
  260.     move.l  DOSBase(a5),a6
  261.     lea     BufferName(a5),a0
  262.     move.l  a0,d1
  263.     move.l  #MODE_OLDFILE,d2
  264.     jsr     _LVOOpen(a6)
  265.     move.l  d0,FileHandle(a5)
  266.     bne.s   lesen
  267.     bra.s   DOS_Fehler
  268.     bra.s   FileSpeicherFrei
  269. lesen
  270.     move.l  FileHandle(a5),d1
  271.     move.l  FileMem(a5),d2
  272.     move.l  fib_Size(a3),d3
  273.     jsr     _LVORead(a6)
  274.     bsr.s   VersionFinden
  275.     moveq   #0,d7
  276.     bsr.w   CommentAusgabe
  277.     move.l  FileHandle(a5),d1
  278.     jsr     _LVOClose(a6)
  279. FileSpeicherFrei
  280.     move.l  4.w,a6
  281.     move.l  fib_Size(a3),d0
  282.     move.l  FileMem(a5),a1
  283.     jsr     _LVOFreeMem(a6)
  284. FileSucheEnde
  285.     move.l  DOSBase(a5),a6
  286.     rts
  287. ;;
  288. ** VersionFinden
  289. VersionFinden
  290. ** Suche $VER:
  291.     move.b  #0,Suche3Var(a5)
  292.     move.b  #0,Suche4Var(a5)
  293.     move.l  fib_Size(a3),d0
  294.     subq    #2,d0
  295.     lea     BufferComment(a5),a2
  296.     move.l  #0,(a2)
  297.     move.l  FileMem(a5),a0
  298.     move.l  d0,d3
  299.     swap    d3
  300.     sub.w   d3,d0
  301. Suche1Loop
  302.     cmp.b   #'$',(a0)+
  303.     beq.s   Suche1Erfolg
  304.     dbra    d0,Suche1Loop
  305.     dbra    d3,Suche1Loop
  306.     bra.w   Suche3
  307. ;;
  308. ** Suche 1
  309. Suche1Erfolg
  310.     cmp.w   #'VE',(a0)
  311.     bne.s   Suche1Loop
  312.     cmp.b   #'R',2(a0)
  313.     bne.s   Suche1Loop
  314.     lea     4(a0),a0
  315.     moveq   #-1,d1
  316. Suche1Version
  317.     moveq   #0,d4
  318. Zahlen1Testen
  319.     addq    #1,d4
  320.     cmp.w   #128,d4
  321.     beq.w   naechsteSuche
  322.     subq    #1,d0
  323.     tst.w   d3
  324.     bne.s   Ver1testen
  325.     cmp.w   #2,d0
  326.     beq.w   naechsteSuche
  327. Ver1testen
  328.     cmp.b   #$39,(a0)+       ;Zahlencode 30-39
  329.     bhi.s   Zahlen1Testen
  330.     cmp.b   #$2F,-1(a0)
  331.     bls.s   Zahlen1Testen
  332.     tst.b   d1
  333.     beq.s   Suche1aErfolg
  334.     bsr.w   VersionName
  335.     tst.b   d1
  336.     beq.s   Zahlen1Testen
  337. Suche1aErfolg
  338.     move.b  -2(a0),d2
  339.     bclr    #5,d2
  340.     cmp.b   #'V',d2
  341.     beq.s   VorVersion1Check
  342.     cmp.b   #$20,-2(a0)
  343.     beq.s   VorVersion1Check
  344.     cmp.b   #'(',-2(a0)
  345.     beq.w   VerNr1aEnde
  346.     bra.s   Zahlen1Testen
  347. VorVersion1Check
  348.     cmp.b   #$20,(a0)
  349.     beq.s   VorVersion2Check
  350.     cmp.b   #$2e,(a0)
  351.     beq.s   VorVersion2Check
  352.     cmp.b   #$39,(a0)
  353.     bhi.s   Zahlen1Testen
  354.     cmp.b   #$2F,(a0)
  355.     bls.s   Zahlen1Testen
  356. VorVersion2Check
  357.     move.w  #'V ',(a2)+
  358.     move.b  -1(a0),(a2)+
  359. VerNr1Loop
  360.     move.b  (a0)+,(a2)+
  361.     cmp.b   #' ',-1(a2)
  362.     beq.s   VerNr1Ende
  363.     cmp.b   #'(',-1(a2)
  364.     beq.s   VerNr1Leer
  365.     cmp.b   #',',-1(a2)
  366.     beq.s   VerNr1Leer
  367.     cmp.b   #13,-1(a2)
  368.     beq.s   VerNr1Leer
  369.     cmp.b   #10,-1(a2)
  370.     beq.s   VerNr1Leer
  371.     cmp.b   #0,-1(a2)
  372.     bne.s   VerNr1Loop
  373. VerNr1Leer  
  374.     move.b  #' ',-1(a2)
  375. VerNr1Ende  
  376.     tst.l   NDAArg(a5)
  377.     bne.w   kein1Datum
  378.     move.l  a0,a1
  379.     moveq   #0,d4
  380. Suche1Datum
  381.     addq    #1,d4
  382.     cmp.w   #128,d4
  383.     beq.w   Suche2Datum
  384.     subq    #1,d0
  385.     tst.w   d3
  386.     bne.s   Ver2testen
  387.     tst.w   d0
  388.     beq.w   Suche2Datum
  389. Ver2testen
  390.     cmp.b   #'(',(a0)+
  391.     bne.s   Suche1Datum
  392.     cmp.b   #$39,(a0)
  393.     bhi.s   Datum2format
  394.     cmp.b   #$2F,(a0)
  395.     bls.s   Suche1Datum
  396.     cmp.b   #$39,1(a0)
  397.     bhi.s   Datum1format
  398.     cmp.b   #$2F,1(a0)
  399.     bls.s   Datum1format
  400. Datum1Erfolg    
  401.     move.b  -1(a0),(a2)+
  402. Datum1Loop
  403.     move.b  (a0)+,(a2)+
  404.     cmp.b   #')',-1(a2)
  405.     bne.s   Datum1Loop
  406.     bra.w   Datum1Gefunden
  407. Datum2format
  408.     move.l  a0,d2
  409.     move.b  (a0)+,d7
  410.     bclr    #5,d7
  411.     cmp.b   #'Z',d7
  412.     bhi.s   Suche1Datum
  413.     cmp.b   #$40,d7
  414.     bls.s   Suche1Datum
  415.     bsr.s   Buchstabe
  416.     tst.b   d1
  417.     beq.s   Suche1Datum
  418.     bsr.s   Buchstabe
  419.     tst.b   d1
  420.     beq.s   Suche1Datum
  421.     move.l  d2,a0
  422.     bra.s   Datum1Erfolg
  423. Buchstabe
  424.     cmp.b   #$7a,(a0)+
  425.     bhi.s   Datum2keinB
  426.     cmp.b   #$40,-1(a0)
  427.     bls.s   Datum2keinB
  428.     moveq   #1,d1
  429.     rts
  430. Datum2keinB
  431.     moveq   #0,d1
  432.     rts
  433. Datum1format
  434.     cmp.b   #'.',1(a0)
  435.     beq.s   Datum1Erfolg
  436.     cmp.b   #'-',1(a0)
  437.     beq.s   Datum1Erfolg
  438.     cmp.b   #'/',1(a0)
  439.     beq.s   Datum1Erfolg
  440.     cmp.b   #' ',1(a0)
  441.     beq.s   Datum1Erfolg
  442.     cmp.b   #':',1(a0)
  443.     beq.s   Datum1Erfolg
  444.     bra.s   Suche1Datum 
  445. Datumformat
  446.     cmp.b   #'.',(a0)
  447.     beq.s   DatePunkt
  448.     cmp.b   #'-',(a0)
  449.     beq.s   DateStrich
  450.     cmp.b   #'/',(a0)
  451.     beq.s   DateSlash
  452.     cmp.b   #' ',(a0)
  453.     beq.s   DateLeer
  454.     cmp.b   #':',(a0)
  455.     beq.s   DateDoppelPunkt
  456.     rts
  457. DateDoppelPunkt
  458.     move.b  #':',d1
  459.     rts
  460. DatePunkt
  461.     move.b  #'.',d1
  462.     rts
  463. DateStrich
  464.     move.b  #'-',d1
  465.     rts     
  466. DateSlash
  467.     move.b  #'/',d1
  468.     rts     
  469. DateLeer
  470.     move.b  #' ',d1
  471.     rts
  472. Suche2Datum
  473.     move.l  a1,a0
  474.     moveq   #0,d4
  475. Suche2Loop
  476.     addq    #1,d4
  477.     cmp.w   #128,d4
  478.     beq.s   kein1Datum
  479.     subq    #1,d0
  480.     tst.w   d3
  481.     bne.s   Ver3testen
  482.     tst.w   d0
  483.     beq.s   kein1Datum
  484. Ver3testen
  485.     cmp.b   #$39,(a0)+
  486.     bhi.s   Suche2Loop
  487.     cmp.b   #$2F,-1(a0)
  488.     bls.s   Suche2Loop
  489.     move.l  a0,a1
  490.     moveq   #0,d1
  491.     bsr.s   Datumformat
  492.     addq    #1,a0
  493.     bsr.s   Datumformat
  494.     tst.b   d1
  495.     beq.s   Suche2Loop
  496.     addq    #1,a0
  497.     moveq   #9,d0
  498. Suche2aLoop
  499.     cmp.b   (a0)+,d1
  500.     beq.s   Suche2Monat
  501.     dbra    d0,Suche2aLoop
  502. SucheWieder 
  503.     move.l  a1,a0
  504.     bra.s   Suche2Loop
  505. Suche2Monat 
  506.     cmp.b   #$39,(a0)
  507.     bhi.s   SucheWieder
  508.     cmp.b   #$2F,(a0)
  509.     bls.s   SucheWieder
  510.     cmp.b   #$39,2(a0)
  511.     bhi.s   Jahrende
  512.     cmp.b   #$2F,2(a0)
  513.     bls.s   Jahrende
  514.     addq    #2,a0
  515. Jahrende
  516.     addq    #2,a0
  517.     sub.l   a1,a0
  518.     move.l  a0,d0
  519.     subq    #1,d0
  520.     move.b  -1(a1),(a2)+
  521. Suche2bLoop
  522.     move.b  (a1)+,(a2)+
  523.     dbra    d0,Suche2bLoop
  524. Datum1Gefunden                  
  525.     move.b  #' ',(a2)+
  526. kein1Datum
  527.     rts
  528. naechsteSuche
  529.     tst.b   Suche3Var(a5)
  530.     beq.w   Suche3
  531.     bra.w   Suche3Fortsetzen
  532. VerNr1aEnde
  533.     tst.l   NDAArg(a5)
  534.     bne.s   kein1Datum
  535.     lea     -2(a0),a0
  536.     move.w  #'V ',(a2)+
  537.     bra.w   VerNr1Ende
  538. ;;
  539. ** VersionName
  540. VersionName
  541.     lea     fib_FileName(a3),a1
  542.     bsr.s   ZahlCheck
  543.     tst.b   d1
  544.     beq.s   VersionNaKZEnd
  545.     move.l  a0,d2
  546.     cmp.b   -1(a0),d1
  547.     bne.s   VersionNameEnde
  548. VerZahlLoop
  549.     bsr.s   ZahlCheck
  550.     tst.b   d1
  551.     beq.s   VersionNaVorEnde
  552.     exg     a0,a1
  553.     bsr.s   ZahlCheck
  554.     tst.b   d1
  555.     beq.s   VersionNaVorEnde
  556.     exg     a0,a1
  557.     cmp.b   -1(a1),d1
  558.     beq.s   VerZahlLoop
  559.     move.l  d2,a0
  560. VersionNaKZEnd
  561.     moveq   #-1,d1
  562.     rts
  563. VersionNaVorEnde
  564.     moveq   #0,d1
  565. VersionNameEnde
  566.     rts
  567. ;;
  568. ** ZahlCheck
  569. ZahlCheck
  570.     move.b  (a1)+,d1
  571.     cmp.b   #0,d1
  572.     beq.s   ZahlCheckEnde
  573.     cmp.b   #$39,d1
  574.     bhi.s   ZahlCheck
  575.     cmp.b   #$2F,d1
  576.     bls.s   ZahlCheck
  577. ZahlCheckEnde
  578.     rts
  579. ;;
  580. ** InitSuche
  581. InitSuche
  582.     move.l  fib_Size(a3),d0
  583.     subq    #2,d0
  584.     move.l  d0,d3
  585.     swap    d3
  586.     sub.w   d3,d0
  587.     lea     fib_FileName(a3),a1
  588.     move.b  (a1),d1
  589.     bclr    #5,d1
  590.     move.b  d1,Suche2Var(a5)
  591.     move.l  a1,a0
  592. FileName3Loop
  593.     cmp.b   #0,(a1)+
  594.     beq.s   FileName3Ende
  595.     cmp.b   -1(a1),d2
  596.     bne.s   FileName3Loop
  597. FileName3Ende
  598.     sub.l   a0,a1
  599.     move.w  a1,d2
  600.     subq    #3,d2
  601.     move.w  d2,d5
  602.     move.l  FileMem(a5),a0
  603.     rts
  604. ;;
  605. ** Suche3
  606. Suche3
  607.     move.b  #1,Suche3Var(a5)
  608.     moveq   #0,d2
  609.     bsr.s   InitSuche
  610. Suche3Fortsetzen
  611.     move.b  Suche2Var(a5),d1
  612. Suche3Loop
  613.     move.b  (a0)+,d2
  614.     bclr    #5,d2
  615.     cmp.b   d1,d2
  616.     beq.s   Suche3Erfolg
  617.     dbra    d0,Suche3Loop
  618.     dbra    d3,Suche3Loop
  619.     bra.s   SuchMisErfolg
  620. Suche3Erfolg
  621.     lea     fib_FileName(a3),a1
  622.     lea     1(a1),a1
  623.     move.l  a0,d4
  624.     move.w  d5,d2
  625. Suche3aLoop
  626.     move.b  (a0)+,d7
  627.     bclr    #5,d7
  628.     move.b  (a1)+,d6
  629.     bclr    #5,d6
  630.     cmp.b   d6,d7
  631.     bne.s   nicht2Erfolg
  632.     dbra    d2,Suche3aLoop
  633.     moveq   #0,d1
  634.     bra.w   Suche1Version
  635. nicht2Erfolg
  636.     move.l  d4,a0
  637.     bra.s   Suche3Loop
  638. ;;
  639. ** Suche4
  640. Suche4
  641.     move.b  #1,Suche4Var(a5)
  642.     moveq   #'.',d2
  643.     bsr.s   InitSuche
  644.     bra.s   Suche3Fortsetzen
  645. ;;
  646. SuchMisErfolg
  647.     tst.b   Suche4Var(a5)
  648.     beq.s   Suche4
  649.     rts
  650. ;;
  651. ** Comment Bearbeitung + Schreiben + Ausgabe
  652. CommentAusgabe
  653.     tst.l   ONCArg(a5)
  654.     bne.w   keinCommSA
  655.     lea     fib_Comment(a3),a1
  656.     lea     NichtMoeglich(pc),a0
  657.     moveq   #2,d1
  658. nichtmLoop
  659.     move.l  (a1)+,d0
  660.     cmp.l   (a0)+,d0
  661.     bne.s   VersionErkennen
  662.     dbra    d1,nichtmLoop
  663.     bra.s   keinCommSA
  664. VersionErkennen
  665.     lea     BufferComment(a5),a1
  666.     move.l  a1,a0
  667.     sub.l   a2,a1
  668.     move.l  a1,d0
  669.     neg.l   d0
  670.     lea     fib_Comment(a3),a1
  671.     tst.b   (a1)
  672.     bne.s   einComment
  673.     cmp.l   a2,a0
  674.     beq.w   QuietTest
  675.     move.b  #0,-1(a2)
  676.     bra.w   VComent
  677. alteDate2Loop
  678.     cmp.b   #')',(a1)+
  679.     bne.s   alteDate2Loop
  680.     bra.s   keineVersComment        
  681. Leer2Stellen
  682.     lea 4(a1),a1
  683. Leer2Loop
  684.     cmp.b   #' ',(a1)+
  685.     bne.s   Leer2Loop
  686. Leer2aLoop
  687.     cmp.b   #' ',(a1)+
  688.     beq.s   keineVersComment
  689.     cmp.b   #0,-1(a1)
  690.     bne.s   Leer2aLoop
  691.     bra.s   keineVersComment
  692. einComment  
  693.     cmp.w   #'V ',(a1)
  694.     bne.s   keineVersComment
  695.     tst.l   (a0)
  696.     beq.s   keineVersComment
  697.     lea     2(a1),a1
  698.     lea     2(a0),a0
  699.     move.b  (a1)+,d1
  700.     cmp.b   (a0)+,d1
  701.     bne.s   keineVersComment
  702.     cmp.b   #'(',-1(a1)
  703.     beq.s   alteDate2Loop
  704. alteVerLoop
  705.     cmp.b   #' ',(a1)+
  706.     beq.s   DateComment
  707.     cmp.b   #0,-1(a1)
  708.     bne.s   alteVerLoop
  709. DateComment
  710.     tst.l   NDAArg(a5)
  711.     bne.s   keineVersComment
  712.     cmp.b   #'(',(a1)
  713.     beq.s   alteDate2Loop
  714.     cmp.b   #$39,(a1)
  715.     bhi.s   keineVersComment
  716.     cmp.b   #$2f,(a1)
  717.     bls.s   keineVersComment
  718.     cmp.b   #' ',1(a1)
  719.     beq.s   Leer2Stellen
  720.     cmp.b   #' ',2(a1)
  721.     beq.s   Leer2Stellen
  722. alteDateLoop    
  723.     cmp.b   #' ',(a1)+
  724.     beq.s   keineVersComment
  725.     cmp.b   #0,-1(a1)
  726.     bne.s   alteDateLoop
  727. keineVersComment
  728.     tst.l   CSAArg(a5)
  729.     beq.s   Comment1Loop
  730.     move.l  a1,a0
  731. WoIstDieNull
  732.     tst.b   (a0)+
  733.     bne.s   WoIstDieNull
  734.     sub.l   a1,a0
  735.     moveq   #79,d1
  736.     sub.w   a0,d1
  737.     addq    #1,d1
  738.     cmp.w   d1,d0
  739.     bls.s   Indexsetzen
  740.     move.l  d1,d0
  741. Indexsetzen
  742.     lea     BufferComment(a5),a2
  743.     lea     (a2,d0.w),a2
  744. Comment1Loop
  745.     move.b  (a1)+,(a2)+
  746.     addq    #1,d0
  747.     cmp.b   #79,d0
  748.     bne.s   Comment1Loop
  749. VComent 
  750.     lea     BufferName(a5),a0
  751.     move.l  a0,d1
  752.     lea     BufferComment(a5),a0
  753.     move.l  a0,d2
  754.     jsr     _LVOSetComment(a6)
  755.     tst.l   d0
  756.     beq.s   QuietTest
  757.     bsr.w   DOS_Fehler
  758. QuietTest
  759.     tst.l   QUIETArg(a5)
  760.     bne.s   LoescheBuffer
  761. keinCommSA
  762.     lea     fib_FileName(a3),a1
  763.     move.l  a1,a0
  764. WoIstDie2Null
  765.     tst.b   (a0)+
  766.     bne.s   WoIstDie2Null
  767.     sub.l   a1,a0
  768.     move.l  a0,d3
  769.     subq    #1,d3
  770.     move.l  a1,d2
  771.     move.l  OutputHandle(a5),d1
  772.     jsr     _LVOWrite(a6)
  773.     lea     Output2Leer(a5),a1
  774.     move.l  a1,a0
  775. WoIstDie3Null
  776.     tst.b   (a0)+
  777.     bne.s   WoIstDie3Null
  778.     move.b  #10,-1(a0)
  779.     sub.l   a1,a0
  780.     move.l  a0,d3
  781.     move.l  a1,d2
  782.     move.l  OutputHandle(a5),d1
  783.     jsr     _LVOWrite(a6)
  784. LoescheBuffer
  785.     lea     BufferComment(a5),a0
  786.     moveq   #21,d0
  787. Loesche1Loop
  788.     move.l  #0,(a0)+
  789.     dbra    d0,Loesche1Loop
  790.     rts
  791. ;;
  792. ** Byte Daten
  793. NichtMoeglich dc.b 'nicht möglic'
  794. Willkommen  dc.b 10,10,'$VER: BangerVersion 1.326 (29-Aug-95)',10
  795.             dc.b 'Willkommen zu BangerVersion',10
  796.             dc.b 'Copyright by Andre´ Trettin',10,10
  797. WillkommenEnde
  798. Comtemplate dc.b 'FILES/A/M,CSA=COMMENTSAVE/S,NDA=NODATUM/S,ONC=ONLYCON/S,ALL/S,QUIET/S',0
  799. dosname     DOSNAME
  800. ;        even
  801. ;TempPC  dc.l File0,0
  802. ;File0   dc.b 'RAM:Ver',0
  803. ;File1   dc.b 'RAM:_ASL.library',0
  804. ;File2   dc.b 'RAM:xprzvoice.library',0
  805. ;File3   dc.b 'RAM:xprzspeed.library',0
  806. ;File4   dc.b 'RAM:xemvt340.library',0
  807. ;;
  808.